CC = /usr/bin/gcc
CFLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4
LFLAGS = -framework OpenGL -framework GLUT
WFLAGS = -Wall -Wextra -Wno-unused-parameter -Werror
OBJECTS = obj/Button.o \
          obj/DisplayObjects.o \
          obj/FunctionControls.o \
          obj/main.o \
          obj/Matrix.o \
          obj/NumberField.o \
          obj/Quaternion.o \
          obj/QuaternionDisplay.o \
          obj/QuaternionControls.o \
          obj/Utilities.o \
          obj/Vector.o

all: ${OBJECTS} create_bundle auto_increment_build_number copy_resources
	build_number=`cat build_number.txt`; \
	build_date=`cat build_date.txt`; \
	sed "s/<string>\(build \)[0-9]*-[0-9]*<\/string>/<string>\1$${build_date}-$${build_number}<\/string>/" build/Quaternion\ playground.app/Contents/Info.plist > build/Quaternion\ playground.app/Contents/Info.plist.temp
	mv build/Quaternion\ playground.app/Contents/Info.plist.temp build/Quaternion\ playground.app/Contents/Info.plist
	${CC} -o build/Quaternion\ playground.app/Contents/MacOS/Quaternion\ playground ${CFLAGS} ${LFLAGS} ${OBJECTS}
	echo "Build succeeded!"

create_bundle:
	mkdir -p build/Quaternion\ playground.app/Contents/MacOS
	mkdir -p build/Quaternion\ playground.app/Contents/Resources

copy_resources:
	cp Info.plist build/Quaternion\ playground.app/Contents/Info.plist
	cp -r ../Resources/* build/Quaternion\ playground.app/Contents/Resources

auto_increment_build_number:
	touch build_number.txt; \
	echo $$(( `cat build_number.txt` + 1 )) > build_number.txt; \
	\
	build_number=`cat build_number.txt`; \
	build_date=`date +%Y%m%d`; \
	\
	touch build_date.txt; \
	if [[ $$build_date > `cat build_date.txt` ]]; then \
		echo $$build_date > build_date.txt; \
		echo "1" > build_number.txt; \
		build_number=1; \
	fi

obj/Button.o: ../Source/Button.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/Button.o ../Source/Button.c

obj/DisplayObjects.o: ../Source/DisplayObjects.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/DisplayObjects.o ../Source/DisplayObjects.c

obj/FunctionControls.o: ../Source/FunctionControls.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/FunctionControls.o ../Source/FunctionControls.c

obj/main.o: ../Source/main.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/main.o ../Source/main.c

obj/Matrix.o: ../Source/Matrix.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/Matrix.o ../Source/Matrix.c

obj/NumberField.o: ../Source/NumberField.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/NumberField.o ../Source/NumberField.c

obj/Quaternion.o: ../Source/Quaternion.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/Quaternion.o ../Source/Quaternion.c

obj/QuaternionDisplay.o: ../Source/QuaternionDisplay.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/QuaternionDisplay.o ../Source/QuaternionDisplay.c

obj/QuaternionControls.o: ../Source/QuaternionControls.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/QuaternionControls.o ../Source/QuaternionControls.c

obj/Utilities.o: ../Source/Utilities.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/Utilities.o ../Source/Utilities.c

obj/Vector.o: ../Source/Vector.c
	${CC} -c ${CFLAGS} ${WFLAGS} -o obj/Vector.o ../Source/Vector.c

clean:
	rm obj/*.o
	rm -rf build/Quaternion\ playground.app
